package lolxxs.chenyanting.utils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.io.*;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpURLConnectionUtils {
    public static String doGet(String httpUrl) {
        HttpURLConnection connection = null;
        InputStream inputStream = null;
        BufferedReader bufferedReader = null;
        String result = null;
        try {
            // 创建远程url连接对象
            URL url = new URL(httpUrl);

            // 通过远程url连接对象打开一个连接，强转成httpURLConnection类
            connection = (HttpURLConnection) url.openConnection();

            // 设置连接方式：get
            connection.setRequestMethod("GET");

            connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

            // 设置连接主机服务器的超时时间：15000毫秒
            connection.setConnectTimeout(15000);

            // 设置读取远程返回的数据时间：60000毫秒
            connection.setReadTimeout(60000);


            // 通过connection连接，获取输入流
            if (connection.getResponseCode() == 200) {
                inputStream = connection.getInputStream();
                // 封装输入流is，并指定字符集
                bufferedReader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"));
                // 存放数据
                StringBuilder sb = new StringBuilder();
                String temp;
                while ((temp = bufferedReader.readLine()) != null) {
                    sb.append(temp);
                    sb.append(System.lineSeparator());  // 这里需要追加换行符，默认读取的流没有换行符，需要加上才能符合预期
                }
                result = sb.toString();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            if (null != bufferedReader) {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != inputStream) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (null != connection) {
                connection.disconnect();// 关闭远程连接
            }
        }
        return result;
    }


    public static String doPost(String httpUrl, String param) {
        HttpURLConnection connection = null;
        InputStream is = null;
        OutputStream os = null;
        BufferedReader br = null;
        String result = null;
        try {
            URL url = new URL(httpUrl);
            // 通过远程url连接对象打开连接
            connection = (HttpURLConnection) url.openConnection();

            // 设置连接请求方式
            connection.setRequestMethod("POST");

            // 设置连接主机服务器超时时间：15000毫秒
            connection.setConnectTimeout(15000);

            // 设置读取主机服务器返回数据超时时间：60000毫秒
            connection.setReadTimeout(60000);

            // 默认值为：false，当向远程服务器传送数据/写数据时，需要设置为true
            connection.setDoOutput(true);

            // 设置传入参数的格式:请求参数应该是 name1=value1&name2=value2 的形式。
            connection.setRequestProperty("Content-Type", "application/json");

            // 通过连接对象获取一个输出流
            os = connection.getOutputStream();

            // 通过输出流对象将参数写出去/传输出去,它是通过字节数组写出的
            os.write(param.getBytes());

            // 通过连接对象获取一个输入流，向远程读取
            if (connection.getResponseCode() == 200) {
                is = connection.getInputStream();
                // 对输入流对象进行包装:charset根据工作项目组的要求来设置
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                StringBuilder sb = new StringBuilder();
                String temp;
                // 循环遍历一行一行读取数据
                while ((temp = br.readLine()) != null) {
                    sb.append(temp);
                    sb.append(System.lineSeparator());
                }
                result = sb.toString();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            // 关闭资源
            if (null != br) {
                try {
                    br.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != os) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != is) {
                try {
                    is.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (null != connection) {
                // 断开与远程地址url的连接
                connection.disconnect();
            }
        }
        return result;
    }

    public static String paramJson(String appid, String appsecret, String code){
        JSONObject head = new JSONObject();
        head.put("appid",appid);
        head.put("appsecret",appsecret);
        head.put("code",code);
        JSONArray ar = new JSONArray();
        ar.add(head);

       return head.toJSONString();
    }



    public static void main(String[] args) {
//        https://343o494816.picp.vip

//        http://localhost:9000
//        GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
//        请求
//        String post = HttpURLConnectionUtils.doPost("https://343o494816.picp.vip/user/remotelogin", "{code: 123}");
//        System.out.println(post);
//         appid: wxed5fdf663440bf8a
//        appsecret: 3ac5f0bbe2aa4ac533c5d89ffb2b50e7
//        "003HBkml2egc194dAbll2CegCR3HBkmp"
        String get = HttpURLConnectionUtils.doGet(" https://api.weixin.qq.com/sns/jscode2session?appid=wxed5fdf663440bf8a&secret=3ac5f0bbe2aa4ac533c5d89ffb2b50e7&js_code=003HBkml2egc194dAbll2CegCR3HBkmp&grant_type=authorization_code");
//        HttpURLConnectionUtils.paramJson();
        System.out.println(get);
    }
}
